package com.wxxymaker.edu.controller.api;

import com.blade.ioc.annotation.Inject;
import com.blade.mvc.annotation.*;
import com.blade.mvc.ui.RestResponse;
import com.wxxymaker.edu.model.entity.Course;
import com.wxxymaker.edu.roles.TeacherRoles;
import com.wxxymaker.edu.service.CourseService;
import com.wxxymaker.edu.utils.TokenUtils;
import io.github.biezhi.anima.page.Page;

/**
 * @AUTHOR soft
 * @DATE 2018/9/6 19:30
 * @DESCRIBE 课程接口
 * 需要进行接口referer拦截 没实现
 * 必须是由本系统发出的请求
 */
@Path(value = "/course/api", restful = true)
public class CourseHandlerApi {

    @Inject
    private CourseService courseService;

    /**
     * 根据kid获取课程
     * @param kid 课程id
     */
    @PostRoute("/:kid")
    public RestResponse one(@PathParam int kid) {
        Course course = courseService.byId(kid); // 还原
        if (course != null) {
            return RestResponse.ok(course);
        }
        return RestResponse.fail();
    }

    /**
     * 多条件分页查询，只能查询到发布过的课程
     * @param type 查询方式 类型(hot热门,new最新,all所有 默认)
     * @param spec 所属专业id
     * @param sub  所属学科id
     * @param uid  教师id
     * @param page 页码
     * @param size 分页尺寸
     */
    @PostRoute("/public/page")
    public RestResponse page(@Param(defaultValue = "all") String type,
                             @Param int spec,
                             @Param int sub,
                             @Param int uid,
                             @Param(defaultValue = "1") int page,
                             @Param(defaultValue = "10") int size) {
        Page<Course> coursePage = courseService.page(type, spec, sub, uid, page, size, 1);
        if (coursePage.getTotalRows() > 0) {
            return RestResponse.ok(coursePage);
        }
        return RestResponse.fail();
    }

    /**
     * 受保护的接口 需要老师权限认证 可以获取到未发布的课程
     * 为发布的课程只有是当前登录老师的才能获取
     * @param spec 所属专业id
     * @param sub  所属学科id
     * @param page 页码
     * @param size 分页尺寸
     * @param status 课程状态
     */
    @TeacherRoles
    @PostRoute("/protect/page")
    public RestResponse page_(@Param int spec,
                              @Param int sub,
                              @Param(defaultValue = "1") int page,
                              @Param(defaultValue = "10") int size,
                              @Param Integer status) {
        int uid = TokenUtils.currentUser().getId(); // 保证是当前登录用户
        Page<Course> coursePage = courseService.page(spec, sub, uid, page, size, status);
        if (coursePage.getTotalRows() > 0) {
            return RestResponse.ok(coursePage);
        }
        return RestResponse.fail();
    }

    /**
     * 搜索课程
     * @param q 搜索关键字 课程标题
     * @param page 页码
     * @param size 分页尺寸
     */
    @Route("/search")
    public RestResponse search(@Param String q,
                               @Param(defaultValue = "1") int page,
                               @Param(defaultValue = "10") int size) {
        Page<Course> search = courseService.search(q, page, size);
        if (search.getTotalRows() > 0) {
            return RestResponse.ok(search);
        }
        return RestResponse.fail();
    }

}